package com.fastloan.safe.mgt.user.service;

import com.fastloan.safe.core.param.RoleTypeEnum;
import com.fastloan.safe.mgt.root.model.vo.DefFunTreeVo;
import com.fastloan.safe.mgt.user.model.CmuUser;
import com.fastloan.safe.mgt.user.model.vo.CmuUserVo;
import com.kawins.base.BaseService;
import com.kawins.result.ResultTo;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * @author rankai
 *         createTime 2017-09-2017/9/25 17:01
 */
public interface CmuUserService extends BaseService<CmuUser> {

    String DEF_PASSWORD = "1234";

    /**
     * 分页列表
     *
     * @param map
     * @return
     */
    List<CmuUserVo> pageList(Map<String, Object> map);

    /**
     * 根据机构ID获得机构所在用户分页列表
     *
     * @param map
     * @return
     */
    List<CmuUserVo> pageListByOrgId(Map<String, Object> map);


    /**
     * 增加用户
     *
     * @param user
     * @param roleIds
     * @param orgId
     * @param isAdmin
     * @param files
     */
    void insertWithRole(CmuUser user, String[] roleIds, String orgId, boolean isAdmin, MultipartFile... files);

    /**
     * 更新用户
     *
     * @param user
     * @param roleIds
     * @param isAdmin
     * @param logoFile
     */
    void updateWithRole(CmuUser user, String[] roleIds, MultipartFile logoFile, boolean isAdmin);

    /**
     * 更新密码
     *
     * @param oldPwd
     * @param newPwd
     * @return
     */
    ResultTo updatePwd(String oldPwd, String newPwd);

    /**
     * @param updateType
     * @param user
     * @return
     */
    ResultTo update(Integer updateType, CmuUser user);


    /**
     * 获取用户所有fun
     *
     * @param userId
     * @return
     */
    List<DefFunTreeVo> paramUserFun(String userId);

    /**
     * 更新用户fun
     *
     * @param userId
     * @param funIds
     */
    void updateUserFun(String userId, String[] funIds);

    /**
     * 根据机构ID获取用户列表
     *
     * @param orgId
     * @param hasSon 是否包含子机构
     * @return
     */
    List<CmuUserVo> selectUserByOrgId(String orgId, boolean hasSon);

    /**
     * 根据roletype获得用户列表
     *
     * @param roleType
     * @return
     */
    List<CmuUserVo> selectUserByRoleType(RoleTypeEnum roleType, String userOrgId);

    /**
     * 根据角色ID获取
     *
     * @param roleId
     * @param userOrgId
     * @return
     */
    List<CmuUser> selectByRoleId(String roleId, String userOrgId);

    /**
     * 获取没有关联机构的子机构管理员
     *
     * @return
     */
    List<CmuUser> selectBySonAdminNoHasOrg();

    /**
     * 修改密码
     *
     * @param userId
     * @param oldPwd
     * @param newPwd
     * @return
     */
    boolean changePwd(String userId, String oldPwd, String newPwd);

    /**
     * 更新身份证正反面
     *
     * @param userId
     * @param identityFront
     * @param identitySide
     * @return
     */
    boolean uploadIdentity(String userId, MultipartFile identityFront, MultipartFile identitySide);
}
